import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rental/common/models/auth/login_request.dart';
import '../../../common/services/index.dart';

class LoginController extends GetxController {
  LoginController();

  // 表单控制器
  final formKey = GlobalKey<FormState>();
  final usernameController = TextEditingController();
  final passwordController = TextEditingController();
  
  // 状态管理
  bool _isLoading = false;
  bool _obscurePassword = true;
  bool _rememberMe = false;
  
  // Getters
  bool get isLoading => _isLoading;
  bool get obscurePassword => _obscurePassword;
  bool get rememberMe => _rememberMe;
  
  // 服务
  late final AuthService _authService;
  
  /// 初始化数据
  void _initData() {
    _authService = Get.find<AuthService>();
    // 尝试从本地存储加载记住的用户名
    _loadRememberedCredentials();
    update(["login"]);
  }
  
  /// 加载记住的凭据
  void _loadRememberedCredentials() {
    // 从 AuthService加载记住的用户名
    final rememberedUsername = _authService.getRememberedUsername();
    final isRemembered = _authService.isRememberMe();
    
    if (isRemembered && rememberedUsername != null && rememberedUsername.isNotEmpty) {
      usernameController.text = rememberedUsername;
      _rememberMe = true;
    }
  }
  
  /// 切换密码可见性
  void togglePasswordVisibility() {
    _obscurePassword = !_obscurePassword;
    update(["login"]);
  }
  
  /// 切换记住我状态
  void toggleRememberMe(bool? value) {
    _rememberMe = value ?? false;
    update(["login"]);
  }
  
  /// 用户名验证
  String? validateUsername(String? value) {
    if (value == null || value.isEmpty) {
      return '请输入用户名';
    }
    if (value.length < 2 || value.length > 20) {
      return '用户名长度必须在2到20个字符之间';
    }
    return null;
  }
  
  /// 密码验证
  String? validatePassword(String? value) {
    if (value == null || value.isEmpty) {
      return '请输入密码';
    }
    if (value.length < 5 || value.length > 20) {
      return '密码长度必须在5到20个字符之间';
    }
    return null;
  }
  
  /// 执行登录
  Future<void> login() async {
    // 表单验证
    if (!formKey.currentState!.validate()) {
      return;
    }
    
    // 参数验证
    final username = usernameController.text.trim();
    final password = passwordController.text;
    
    if (username.length < 2 || username.length > 20) {
      _showErrorMessage('用户名长度必须在2到20个字符之间');
      return;
    }
    if (password.length < 5 || password.length > 20) {
      _showErrorMessage('密码长度必须在5到20个字符之间');
      return;
    }
    
    // 设置加载状态
    _setLoading(true);
    
    try {
      // 创建登录请求模型
      final loginRequest = LoginRequest(
        username: username,
        password: password,
      );
      
      // 调用AuthService进行完整的登录流程（包含API调用和数据保存）
      final response = await _authService.login(
        loginRequest: loginRequest,
        rememberMe: _rememberMe,
      );
      
      if (response.success && response.data != null) {
        
        // 显示成功消息
        Get.snackbar(
          '登录成功',
          '欢迎回来！',
          snackPosition: SnackPosition.TOP,
          backgroundColor: Colors.green,
          colorText: Colors.white,
        );
        
        // 跳转到主页面
        Get.offAllNamed('/main');
      } else {
        // 登录失败
        _showErrorMessage(response.message.isNotEmpty ? response.message : '登录失败，请检查用户名和密码');
      }
    } catch (e) {
      // 异常处理
      _showErrorMessage('登录过程中发生错误：${e.toString()}');
    } finally {
      _setLoading(false);
    }
  }
  
  /// 设置加载状态
  void _setLoading(bool loading) {
    _isLoading = loading;
    update(["login"]);
  }
  

  
  /// 显示错误消息
  void _showErrorMessage(String message) {
    Get.snackbar(
      '登录失败',
      message,
      snackPosition: SnackPosition.TOP,
      backgroundColor: Colors.red,
      colorText: Colors.white,
      duration: const Duration(seconds: 3),
    );
  }
  
  /// 跳转到注册页面
  void goToRegister() {
    Get.toNamed('/register');
  }
  
  /// 忘记密码
  void forgotPassword() {
    // TODO: 实现忘记密码功能
    Get.snackbar(
      '提示',
      '忘记密码功能正在开发中',
      snackPosition: SnackPosition.TOP,
    );
  }

  @override
  void onReady() {
    super.onReady();
    _initData();
  }

  @override
  void onClose() {
    // 清理资源
    usernameController.dispose();
    passwordController.dispose();
    super.onClose();
  }
}
